from rest_framework.views import exception_handler
from .responses import CommonResponse
from .loggers import common_logger


# exc: 异常对象
# context: 其他异常属性
def common_exception_handler(exc, context):
    # 组织异常信息
    # context中取出发生异常的视图类的对象，进而得到类名
    msg = '来自<{}>的异常:<{}>'.format(context.get('view').__class__.__name__, str(exc))
    # 生成异常日志记录到文件
    common_logger.error(msg)
    # 先执行默认异常方法，得到response对象
    rep_obj = exception_handler(exc, context)
    # 没有返回，说明异常未被处理
    if not rep_obj:
        return CommonResponse(state=0, tip='详见异常信息', error=msg)
    # 重新组织默认异常的返回格式
    else:
        return CommonResponse(state=0, tip='详见异常信息', error=rep_obj.data)
